package cn.stard.system.service.impl;

import cn.stard.basic.query.BaseQuery;
import cn.stard.basic.util.PageList;
import cn.stard.system.domain.*;
import cn.stard.system.mapper.MenuMapper;
import cn.stard.system.mapper.PermissionMapper;
import cn.stard.system.mapper.RoleMapper;
import cn.stard.system.service.IRoleService;
import cn.stard.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author stard
 * @since 2022-07-11
 */
@Service
public class RoleServiceImpl extends BaseServiceImpl<Role> implements IRoleService {
    @Autowired
    private RoleMapper roleMapper;
    /*在日常中因为每个角色都有不同的选项与权限所以这边重写添加方法并且链接两种表*/
    @Autowired
    private MenuMapper menuMapper;
    @Autowired
    private PermissionMapper permissionMapper;
    @Override
    public void save(Role role) {
        roleMapper.save(role);
        initRelationTable(role);
    }

    @Override
    public void remove(Long id) {

        deleRelationTable(id);
        roleMapper.remove(id);
    }
    public void deleRelationTable(Long id){
        /*因为他们的表是相关联,role的主键id是两张表的外键id所以这边关联删除主键id就相当于删除掉所以关联的表数据*/
        // 删除角色菜单表的数据
        roleMapper.removeMeun(id);
        // 删除角色权限表数据
        roleMapper.removePermission1(id);
    }


    /*因为是修改所以不确定之前的权限要不要,所以在这之前先清空里面的数据在修改*/
    @Override
    public void update(Role role) {


        roleMapper.update(role);
        initRelationTable(role);
    }
    public void initRelationTable(Role role){
        /*因为他们的表是相关联,role的主键id是两张表的外键id所以这边关联删除主键id就相当于删除掉所以关联的表数据*/
        // 删除角色菜单表的数据
        roleMapper.removeMeuns(role.getId());
        // 删除角色权限表数据
        roleMapper.removePermission(role.getId());
        // 批量添加角色菜单中间表
        roleMapper.saveMeuns(role.getId(),role.getMenus());
        // 批量添加角色权限中间表
        roleMapper.savePermission(role.getId(),role.getPermissions());

    }

    @Override
    public PageList<Role> queryData(BaseQuery baseQuery) {
        // 高级查询数据
        List<Role> rows = roleMapper.queryData(baseQuery);
        HashMap<String, Object> map = new HashMap<>();
        for (Role role : rows) {

//            RoleMenu menus = roleMapper.seleMenu(role.getId());
//            RolePermission permissions = roleMapper.seletPermission(role.getId());
////             通过中间表得到的id去查询自身的表获得对应数据
//            List<Menu> menu = menuMapper.listmenu(menus.getRoleId());
//            List<Permission> permission = permissionMapper.listpermission(permissions.getRoleId());
//
//
////             通过中间表得到的id去查询自身的表获得对应数据 list集合
//            role.setSelepermission(permission);
//            role.setSelemenu(menu);
//            rows.add(role);
        }
        Integer total = roleMapper.queryCount(baseQuery);
        return new PageList<Role>(total,rows);
    }




}
